package maquina.gestor.flujo;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

import maquina.interfaz.io.InterfaceLectorTarjeta;

public class GestorTarjeta extends UnicastRemoteObject implements InterfaceGestorTarjeta {

	private GestorFlujo gestorFlujo;
	
	private InterfaceLectorTarjeta lector;
	
	private static final int port = 1010;
	
	GestorTarjeta(GestorFlujo gestorFlujo) throws RemoteException {
		
		Registry registry = LocateRegistry.getRegistry("localhost",port);
		
		try {
			lector = (InterfaceLectorTarjeta) registry.lookup("LectorTarjetaMAQUINA");
			
			registry.bind("GestorTarjeta", this);
		
		} catch (Exception e) {
			
			e.printStackTrace();
		}		
		
		if(gestorFlujo != null){
			
			this.gestorFlujo = gestorFlujo;
		}
		else{
			throw new NullPointerException("gestorFlujo no pueden ser null");
		}
	}
	
	public void escribirTarjeta(List<String> candidatos){
		
		try {
			lector.escribirTarjeta(candidatos);
			
		} catch (RemoteException e) {

			e.printStackTrace();
		}
	}

	public void ping() {
		try {
			lector.ping(); // llego el true (echo)
		} catch (RemoteException e) {
			gestorFlujo.gestionarFallaLector();
		}
	}

	public void ingresarTarjeta() throws RemoteException {
		
		gestorFlujo.gestionarNuevaTarjeta();
	}
}
